//
// Created by Cedar on 2022/3/13.
//

#include <iostream>
#include <vector>
#include<numeric>

using namespace std;

//class Solution {
//public:
//    int pivotIndex(vector<int>& nums) {
//        //先检查数组是否为空
//        if(nums.empty()) {
//            return -1;
//        }
//        //先把左和以及右和计算出来
//        //在后续遍历数组的过程中,我们计算左和以及右和只要在每次遍历中加/减当前元素的值即可
//        int leftsum = 0;int rightsum = accumulate(nums.begin(),nums.end(),0);
//        for (int i=0;i<nums.size();i++) {
//            rightsum -= nums[i];
//            if (leftsum == rightsum) {
//                return i;
//            }
//            else {
//                leftsum += nums[i];
//            }
//        }
//        return -1;
//    }
//};

class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        if (nums.empty()){
            return -1;
        }
        int m_leftNum = 0;
        int m_rightNum = 0;
        for (int i = 0; i < nums.size(); i++) {
            m_rightNum += nums[i];
        }
        for (int i = 0; i < nums.size(); i++) {
            m_rightNum -= nums[i];
            if (m_leftNum == m_rightNum){
                return i;
            } else{
                m_leftNum += nums[i];
            }
        }
    }
};

class Solution2 {
public:
    int pivotIndex(int *nums[]) {
        int m_leftNum = 0;
        int m_rightNum = 0;
        int m_ArrSize = sizeof(nums)/sizeof (nums[0]);
        for (int i = 0; i < m_ArrSize; i++) {
            m_rightNum += *nums[i];
        }
        for (int i = 0; i < m_ArrSize; i++) {
            m_rightNum -= *nums[i];
            if (m_leftNum == m_rightNum){
                return i;
            } else{
                m_leftNum += *nums[i];
            }
        }
    }
};

class Solution3 {
public:
    int pivotIndex(int(&nums)[3]) {
        int m_leftNum = 0;
        int m_sumNum = 0;
        int m_arrSize = sizeof(&nums)/ sizeof(&nums[0]);
        for (int i = 0; i < m_arrSize; i++) {
            m_sumNum += nums[i];
        }
        for (int i = 0; i < m_arrSize; i++) {
            if (m_leftNum * 2 + nums[i] == m_sumNum){
                return i;
            } else{
                m_leftNum += nums[i];
            }
        }
    }
};

int main(){
    vector <int> nums {0,1,-1};
    int nums1[] = {0,1,-1};
    int * nums2 = nums1;
    Solution3 s;
//    cout << "中间值的下标为：" << s.pivotIndex(nums) << endl;
//    cout << "中间值的下标为：" << s.pivotIndex(nums2) << endl;
    cout << "中间值的下标为：" << s.pivotIndex(nums1) << endl;
}